/*
 * @Author: 我想吃余 483766615@qq.com
 * @Date: 2025-11-15 21:31:19
 * @LastEditors: 我想吃余 483766615@qq.com
 * @LastEditTime: 2025-11-16 13:57:11
 * @FilePath: /code/oscode/thread_pool/Thread.hpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// 对原生线程库封装，简化线程控制操作
#pragma once

#include <pthread.h>

typedef void (*callback_t)(void*);

class Thread
{
public:
    Thread(int num = 0, callback_t cb = nullptr, void *args = nullptr)
        : _tid(0), _cb(cb), _args(args), _threadname("Thread-" + std::to_string(num))
    {}

    void Run()
    {
        pthread_create(&_tid, nullptr, Routine, this);
    }

    void Join()
    {
        pthread_join(_tid, nullptr);
    }

    std::string GetName()
    {
        return _threadname;
    }
    
    pthread_t GetTid()
    {
        return _tid;
    }

private:
    static void *Routine(void *arg)
    {
        Thread *t = static_cast<Thread *>(arg);
        t->Entry();
        return nullptr;
    }

    void Entry()
    {
        _cb(_args);
    }

private:
    pthread_t _tid;            // 线程id
    std::string _threadname;   // 线程name
    callback_t _cb;            // 线程入口函数
    void *_args;               // 线程入口函数参数
};
